import { message } from '@renderer/utlis/feedback'
import axios from 'axios'

import type { AxiosRequestConfig, AxiosInstance } from 'axios'
import { WHITE_LIST } from './config'
const whiteList = WHITE_LIST
class LtRequest {
  instance: AxiosInstance
  constructor(config: AxiosRequestConfig) {
    this.instance = axios.create({
      ...config
    })
    // 请求拦截器
    this.instance.interceptors.request.use(
      function (config) {
        // 设置请求白名单
        whiteList.includes(config.url as string)
          ? ''
          : (config.headers.token = localStorage
              .getItem('token')
              ?.replace(/"/g, ''))
        // 网络请求之前显示遮罩
        return config
      },
      function (error) {
        // 对请求错误做些什么
        return Promise.reject(error)
      }
    )
    // 添加响应拦截器
    this.instance.interceptors.response.use(
      function (response) {
        // 2xx 范围内的状态码都会触发该函数。
        // 对响应数据做点什么
        // console.log(response.data)
        return response.data
      },
      function (error) {
        // 超出 2xx 范围的状态码都会触发该函数。
        // 对响应错误做点什么
        console.log(error)
        if (error.status === 400 || error.status === 422) {
          message(error.response.data.data, 'error')
        }
        return Promise.reject(error)
      }
    )
  }
  request(config: AxiosRequestConfig) {
    return this.instance.request(config)
  }
  get(config: AxiosRequestConfig) {
    return this.instance({ ...config, method: 'GET' })
  }
  post(config: AxiosRequestConfig) {
    return this.instance({ ...config, method: 'POST' })
  }
}

export default LtRequest
